// -----------------------------
// Author: 		Dhaenens Gert	
// Creation: 	8/4/2013 4:39:16 PM				
// -----------------------------

#include "LuaRef.h"
#include "Lua.h"
#include "LuaIncl.h"

namespace ObjectLua
{

	LuaRef::LuaRef(Lua* lpLua)
		: LuaObject(lpLua)
		, m_iRef(0)
	{
	}

	LuaRef::LuaRef(Lua* lpLua, int iRef)
		: LuaObject(lpLua)
		, m_iRef(iRef)
	{
	}

	LuaRef::LuaRef(const LuaRef& refLuaRef)
		: LuaObject(refLuaRef.m_lpLua)
		, m_iRef(refLuaRef.m_iRef)
	{
	}
	
	LuaRef& LuaRef::operator=(const LuaRef& refLuaRef)
	{
		m_lpLua = refLuaRef.m_lpLua;
		m_iRef = refLuaRef.m_iRef;
		return (*this);
	}
	
	LuaRef::~LuaRef()
	{
	}

	void LuaRef::obtainRef()
	{
		m_iRef = luaL_ref(m_lpLua->getState(),LUA_REGISTRYINDEX);
	}
	void LuaRef::push() const
	{
		lua_rawgeti(m_lpLua->getState(),LUA_REGISTRYINDEX,m_iRef);
	}
	void LuaRef::pop() const
	{
		luaL_unref(m_lpLua->getState(),LUA_REGISTRYINDEX,m_iRef);
	}

}